/*
 * ReaderUtilities.java
 *
 * Created on 2008/06/06 +0900
 *
 * $Revision: 38 $
 * $Date: 2008-10-11 08:48:45 +0000 (Sat, 11 Oct 2008) $
 */

package org.gikolet.bbs.imona.reader;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * @author Tetsutaro (latest modification by $Author: tetsutaro.ss $)
 * @version $Revision: 38 $ $Date: 2008-10-11 08:48:45 +0000 (Sat, 11 Oct 2008) $
 */
class ReaderUtilities {
    static void errorChack(byte b) throws IOException {
	switch (b) {
	    case 0x00:
		throw new IOException("なんらかのｴﾗｰ");
	    case 0x01:
		// 読み込もうとしている範囲にレスがない(新しいレスがない)
		throw new IOException("新ﾚｽ無し");
	    case 0x02:
		// iMonaサーバ<->2chの通信エラー
		throw new IOException("iMona鯖<->2chの通信ｴﾗｰ");
	    case 0x03:
		// 検索で何もヒットしなかった
		throw new IOException("該当無し");
	    case 0x04:
		// スレッドはDAT落ち
		throw new IOException("DAT落ち");
	    case 0x05:
	    case 0x06:
	    case 0x07:
	    case 0x08:
	    case 0x09:
	    case 0x0A:
	    case 0x0B:
	    case 0x0C:
	    case 0x0D:
	    case 0x0E:
	    case 0x0F:
		// 未定義のエラー
		throw new IOException("未定義のｴﾗｰ");
	}
    }

    static String toStringFromShift_JISBytes(byte[] bytes)
	    throws UnsupportedEncodingException {

	return toString(bytes, 0, bytes.length);
    }

    static String toString(byte[] bytes, int start, int count)
	    throws UnsupportedEncodingException {
	return new String(bytes, start, count, "Shift_JIS");
    }

    static byte[] toShift_JISBytes(String str) throws UnsupportedEncodingException {
	return str.getBytes("Shift_JIS");
    }

    static int indexOf(byte[] value, byte ch, int fromIndex) {
	return indexOf(value, ch, fromIndex, value.length);
    }

    static int indexOf(byte[] value, byte ch, int fromIndex, int toIndex) {
	if (value == null || value.length == 0) {
	    return -1;
	}
	for (int i = fromIndex; i < value.length && i <= toIndex; i++) {
	    if (value[i] == ch) {
		return i;
	    }
	}
	return -1;
    }

    static byte[] getBytes(byte[] bytes, int start, int to) {
	// とりあえずエラー処理はしない
	byte[] w = new byte[to - start];
	System.arraycopy(bytes, start, w, 0, w.length);

	return w;
    }

    // よくわからんからiMonaのソースそのまま…
    static int toDecimal(byte[] num240) {
	if (num240 == null || num240.length == 0) {
	    return 0;
	}

	int i = num240.length - 2;
	int j = 240;
	int ret = (num240[i + 1] & 0xFF) - 16;

	while (i >= 0) {
	    ret += ((num240[i] & 0xFF) - 16) * j;
	    i--;
	    j = j * 240;
	}

	return ret;
    }
}
